#pragma once
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <assert.h>

typedef int QueueDataType;

//队列中的节点
typedef struct QueueListNode
{
	QueueDataType a;
	struct QueueListNode* next;
}QueueNode;

//队列
typedef struct Queue
{
	QueueNode* _front;
	QueueNode* _back;
	int size;
}Queue;

//队列的初始化
void QueueInit(Queue* pq);

//队列的销毁
void QueueDestroy(Queue* pq);

//入队尾
void QueuePush(Queue* pq,QueueDataType x);

//出队头
void QueuePop(Queue* pq);

//获取队头元素
QueueDataType GetQueueFront(Queue* pq);

//获取队尾元素
QueueDataType GetQueueBack(Queue* pq);

//获取队列元素个数
int GetQueueSize(Queue* pq);

//判空
bool QueueEmpty(Queue* pq);